
package std.math


@!APILevel[
    since: "22"
]
public enum RoundingMode <: Equatable<RoundingMode> & ToString {
    @!APILevel[
        since: "22"
    ]
    Ceiling |
    @!APILevel[
        since: "22"
    ]
    Down |
    @!APILevel[
        since: "22"
    ]
    Floor |
    @!APILevel[
        since: "22"
    ]
    HalfEven |
    @!APILevel[
        since: "22"
    ]
    HalfUp |
    @!APILevel[
        since: "22"
    ]
    Up
    @!APILevel[
        since: "22"
    ]
    public operator func ==(that: RoundingMode): Bool
    
    @!APILevel[
        since: "22"
    ]
    public func toString(): String
}

extend Float64 <: MathExtension<Float64> {
    @Deprecated[message: "Use `public func getPI()` instead."]
    @!APILevel[
        since: "22"
    ]
    public static func GetPI(): Float64
    
    @Deprecated[message: "Use `public func getE()` instead."]
    @!APILevel[
        since: "22"
    ]
    public static func GetE(): Float64
}

extend Float32 <: MathExtension<Float32> {
    @Deprecated[message: "Use `public func getPI()` instead."]
    @!APILevel[
        since: "22"
    ]
    public static func GetPI(): Float32
    
    @Deprecated[message: "Use `public func getE()` instead."]
    @!APILevel[
        since: "22"
    ]
    public static func GetE(): Float32
}

extend Float16 <: MathExtension<Float16> {
    @Deprecated[message: "Use `public func getPI()` instead."]
    @!APILevel[
        since: "22"
    ]
    public static func GetPI(): Float16
    
    @Deprecated[message: "Use `public func getE()` instead."]
    @!APILevel[
        since: "22"
    ]
    public static func GetE(): Float16
}

extend Int8 <: MaxMinValue<Int8> {
    @!APILevel[
        since: "22"
    ]
    public static func getMax(): Int8
    
    @!APILevel[
        since: "22"
    ]
    public static func getMin(): Int8
}

extend Int16 <: MaxMinValue<Int16> {
    @!APILevel[
        since: "22"
    ]
    public static func getMax(): Int16
    
    @!APILevel[
        since: "22"
    ]
    public static func getMin(): Int16
}

extend Int32 <: MaxMinValue<Int32> {
    @!APILevel[
        since: "22"
    ]
    public static func getMax(): Int32
    
    @!APILevel[
        since: "22"
    ]
    public static func getMin(): Int32
}

extend Int64 <: MaxMinValue<Int64> {
    @!APILevel[
        since: "22"
    ]
    public static func getMax(): Int64
    
    @!APILevel[
        since: "22"
    ]
    public static func getMin(): Int64
}

extend IntNative <: MaxMinValue<IntNative> {
    @!APILevel[
        since: "22"
    ]
    public static func getMax(): IntNative
    
    @!APILevel[
        since: "22"
    ]
    public static func getMin(): IntNative
}

extend UInt8 <: MaxMinValue<UInt8> {
    @!APILevel[
        since: "22"
    ]
    public static func getMax(): UInt8
    
    @!APILevel[
        since: "22"
    ]
    public static func getMin(): UInt8
}

extend UInt16 <: MaxMinValue<UInt16> {
    @!APILevel[
        since: "22"
    ]
    public static func getMax(): UInt16
    
    @!APILevel[
        since: "22"
    ]
    public static func getMin(): UInt16
}

extend UInt32 <: MaxMinValue<UInt32> {
    @!APILevel[
        since: "22"
    ]
    public static func getMax(): UInt32
    
    @!APILevel[
        since: "22"
    ]
    public static func getMin(): UInt32
}

extend UInt64 <: MaxMinValue<UInt64> {
    @!APILevel[
        since: "22"
    ]
    public static func getMax(): UInt64
    
    @!APILevel[
        since: "22"
    ]
    public static func getMin(): UInt64
}

extend UIntNative <: MaxMinValue<UIntNative> {
    @!APILevel[
        since: "22"
    ]
    public static func getMax(): UIntNative
    
    @!APILevel[
        since: "22"
    ]
    public static func getMin(): UIntNative
}

extend Float16 <: MaxMinValue<Float16> {
    @!APILevel[
        since: "22"
    ]
    public static func getMax(): Float16
    
    @!APILevel[
        since: "22"
    ]
    public static func getMin(): Float16
}

extend Float32 <: MaxMinValue<Float32> {
    @!APILevel[
        since: "22"
    ]
    public static func getMax(): Float32
    
    @!APILevel[
        since: "22"
    ]
    public static func getMin(): Float32
}

extend Float64 <: MaxMinValue<Float64> {
    @!APILevel[
        since: "22"
    ]
    public static func getMax(): Float64
    
    @!APILevel[
        since: "22"
    ]
    public static func getMin(): Float64
}














extend Int8 <: Integer<Int8> {
    @!APILevel[
        since: "22"
    ]
    public static func isSigned(): Bool
}

extend Int16 <: Integer<Int16> {
    @!APILevel[
        since: "22"
    ]
    public static func isSigned(): Bool
}

extend Int32 <: Integer<Int32> {
    @!APILevel[
        since: "22"
    ]
    public static func isSigned(): Bool
}

extend Int64 <: Integer<Int64> {
    @!APILevel[
        since: "22"
    ]
    public static func isSigned(): Bool
}

extend IntNative <: Integer<IntNative> {
    @!APILevel[
        since: "22"
    ]
    public static func isSigned(): Bool
}

extend UInt8 <: Integer<UInt8> {
    @!APILevel[
        since: "22"
    ]
    public static func isSigned(): Bool
}

extend UInt16 <: Integer<UInt16> {
    @!APILevel[
        since: "22"
    ]
    public static func isSigned(): Bool
}

extend UInt32 <: Integer<UInt32> {
    @!APILevel[
        since: "22"
    ]
    public static func isSigned(): Bool
}

extend UInt64 <: Integer<UInt64> {
    @!APILevel[
        since: "22"
    ]
    public static func isSigned(): Bool
}

extend UIntNative <: Integer<UIntNative> {
    @!APILevel[
        since: "22"
    ]
    public static func isSigned(): Bool
}

extend Float16 <: FloatingPoint<Float16> {
    @!APILevel[
        since: "22"
    ]
    public static func getPI(): Float16
    
    @!APILevel[
        since: "22"
    ]
    public static func getE(): Float16
    
    @!APILevel[
        since: "22"
    ]
    public static func getNaN(): Float16
    
    @!APILevel[
        since: "22"
    ]
    public static func getInf(): Float16
    
    @!APILevel[
        since: "22"
    ]
    public static func getMinDenormal(): Float16
    
    @!APILevel[
        since: "22"
    ]
    public static func getMinNormal(): Float16
}

extend Float32 <: FloatingPoint<Float32> {
    @!APILevel[
        since: "22"
    ]
    public static func getPI(): Float32
    
    @!APILevel[
        since: "22"
    ]
    public static func getE(): Float32
    
    @!APILevel[
        since: "22"
    ]
    public static func getNaN(): Float32
    
    @!APILevel[
        since: "22"
    ]
    public static func getInf(): Float32
    
    @!APILevel[
        since: "22"
    ]
    public static func getMinDenormal(): Float32
    
    @!APILevel[
        since: "22"
    ]
    public static func getMinNormal(): Float32
}

extend Float64 <: FloatingPoint<Float64> {
    @!APILevel[
        since: "22"
    ]
    public static func getPI(): Float64
    
    @!APILevel[
        since: "22"
    ]
    public static func getE(): Float64
    
    @!APILevel[
        since: "22"
    ]
    public static func getNaN(): Float64
    
    @!APILevel[
        since: "22"
    ]
    public static func getInf(): Float64
    
    @!APILevel[
        since: "22"
    ]
    public static func getMinDenormal(): Float64
    
    @!APILevel[
        since: "22"
    ]
    public static func getMinNormal(): Float64
}

@!APILevel[
    since: "22"
]
public func cbrt(x: Float64): Float64

@!APILevel[
    since: "22"
]
public func cbrt(x: Float32): Float32

@!APILevel[
    since: "22"
]
public func cbrt(x: Float16): Float16

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func logBase(x: Float32, base: Float32): Float32

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func logBase(x: Float64, base: Float64): Float64

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func logBase(x: Float16, base: Float16): Float16

@!APILevel[
    since: "22"
]
public func gamma(x: Float64): Float64

@!APILevel[
    since: "22"
]
public func gamma(x: Float32): Float32

@!APILevel[
    since: "22"
]
public func gamma(x: Float16): Float16

@!APILevel[
    since: "22"
]
public func erf(x: Float64): Float64

@!APILevel[
    since: "22"
]
public func erf(x: Float32): Float32

@!APILevel[
    since: "22"
]
public func erf(x: Float16): Float16

@!APILevel[
    since: "22"
]
public func tan(x: Float64): Float64

@!APILevel[
    since: "22"
]
public func tan(x: Float32): Float32

@!APILevel[
    since: "22"
]
public func tan(x: Float16): Float16

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func asin(x: Float64): Float64

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func asin(x: Float32): Float32

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func asin(x: Float16): Float16

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func acos(x: Float64): Float64

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func acos(x: Float32): Float32

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func acos(x: Float16): Float16

@!APILevel[
    since: "22"
]
public func atan(x: Float64): Float64

@!APILevel[
    since: "22"
]
public func atan(x: Float32): Float32

@!APILevel[
    since: "22"
]
public func atan(x: Float16): Float16

@!APILevel[
    since: "22"
]
public func sinh(x: Float64): Float64

@!APILevel[
    since: "22"
]
public func sinh(x: Float32): Float32

@!APILevel[
    since: "22"
]
public func sinh(x: Float16): Float16

@!APILevel[
    since: "22"
]
public func cosh(x: Float64): Float64

@!APILevel[
    since: "22"
]
public func cosh(x: Float32): Float32

@!APILevel[
    since: "22"
]
public func cosh(x: Float16): Float16

@!APILevel[
    since: "22"
]
public func tanh(x: Float64): Float64

@!APILevel[
    since: "22"
]
public func tanh(x: Float32): Float32

@!APILevel[
    since: "22"
]
public func tanh(x: Float16): Float16

@!APILevel[
    since: "22"
]
public func asinh(x: Float64): Float64

@!APILevel[
    since: "22"
]
public func asinh(x: Float32): Float32

@!APILevel[
    since: "22"
]
public func asinh(x: Float16): Float16

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func acosh(x: Float64): Float64

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func acosh(x: Float32): Float32

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func acosh(x: Float16): Float16

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func atanh(x: Float64): Float64

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func atanh(x: Float32): Float32

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func atanh(x: Float16): Float16

/**
* @throws IndexOutOfBoundsException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func leadingZeros(x: UInt64): Int64

/**
* @throws IndexOutOfBoundsException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func leadingZeros(x: UInt32): Int64

/**
* @throws IndexOutOfBoundsException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func leadingZeros(x: UInt16): Int64

/**
* @throws IndexOutOfBoundsException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func leadingZeros(x: UInt8): Int64

/**
* @throws IndexOutOfBoundsException
*/
@OverflowWrapping
@!APILevel[
    since: "22",
    throwexception: true
]
public func leadingZeros(x: Int8): Int64

/**
* @throws IndexOutOfBoundsException
*/
@OverflowWrapping
@!APILevel[
    since: "22",
    throwexception: true
]
public func leadingZeros(x: Int16): Int64

/**
* @throws IndexOutOfBoundsException
*/
@OverflowWrapping
@!APILevel[
    since: "22",
    throwexception: true
]
public func leadingZeros(x: Int32): Int64

/**
* @throws IndexOutOfBoundsException
*/
@OverflowWrapping
@!APILevel[
    since: "22",
    throwexception: true
]
public func leadingZeros(x: Int64): Int64

@!APILevel[
    since: "22"
]
public func trailingZeros(x: UInt64): Int64

@!APILevel[
    since: "22"
]
public func trailingZeros(x: UInt32): Int64

@!APILevel[
    since: "22"
]
public func trailingZeros(x: UInt16): Int64

@!APILevel[
    since: "22"
]
public func trailingZeros(x: UInt8): Int64

@OverflowWrapping
@!APILevel[
    since: "22"
]
public func trailingZeros(x: Int8): Int64

@OverflowWrapping
@!APILevel[
    since: "22"
]
public func trailingZeros(x: Int16): Int64

@OverflowWrapping
@!APILevel[
    since: "22"
]
public func trailingZeros(x: Int32): Int64

@OverflowWrapping
@!APILevel[
    since: "22"
]
public func trailingZeros(x: Int64): Int64

/**
* @throws IndexOutOfBoundsException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func countOnes(x: UInt64): Int64

/**
* @throws IndexOutOfBoundsException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func countOnes(x: UInt32): Int64

/**
* @throws IndexOutOfBoundsException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func countOnes(x: UInt16): Int64

/**
* @throws IndexOutOfBoundsException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func countOnes(x: UInt8): Int64

/**
* @throws IndexOutOfBoundsException
*/
@OverflowWrapping
@!APILevel[
    since: "22",
    throwexception: true
]
public func countOnes(x: Int8): Int64

/**
* @throws IndexOutOfBoundsException
*/
@OverflowWrapping
@!APILevel[
    since: "22",
    throwexception: true
]
public func countOnes(x: Int16): Int64

/**
* @throws IndexOutOfBoundsException
*/
@OverflowWrapping
@!APILevel[
    since: "22",
    throwexception: true
]
public func countOnes(x: Int32): Int64

/**
* @throws IndexOutOfBoundsException
*/
@OverflowWrapping
@!APILevel[
    since: "22",
    throwexception: true
]
public func countOnes(x: Int64): Int64

/**
* @throws IndexOutOfBoundsException
*/
@Deprecated[message: "Use global funtion `public func countOnes(x: Int8): Int64` instead."]
@!APILevel[
    since: "22",
    throwexception: true
]
public func countOne(x: Int8): Int8

/**
* @throws IndexOutOfBoundsException
*/
@Deprecated[message: "Use global funtion `public func countOnes(x: Int16): Int64` instead."]
@!APILevel[
    since: "22",
    throwexception: true
]
public func countOne(x: Int16): Int8

/**
* @throws IndexOutOfBoundsException
*/
@Deprecated[message: "Use global funtion `public func countOnes(x: Int32): Int64` instead."]
@!APILevel[
    since: "22",
    throwexception: true
]
public func countOne(x: Int32): Int8

/**
* @throws IndexOutOfBoundsException
*/
@Deprecated[message: "Use global funtion `public func countOnes(x: Int64): Int64` instead."]
@!APILevel[
    since: "22",
    throwexception: true
]
public func countOne(x: Int64): Int8

/**
* @throws IndexOutOfBoundsException
*/
@Deprecated[message: "Use global funtion `public func countOnes(x: UInt8): Int64` instead."]
@!APILevel[
    since: "22",
    throwexception: true
]
public func countOne(x: UInt8): Int8

/**
* @throws IndexOutOfBoundsException
*/
@Deprecated[message: "Use global funtion `public func countOnes(x: UInt16): Int64` instead."]
@!APILevel[
    since: "22",
    throwexception: true
]
public func countOne(x: UInt16): Int8

/**
* @throws IndexOutOfBoundsException
*/
@Deprecated[message: "Use global funtion `public func countOnes(x: UInt32): Int64` instead."]
@!APILevel[
    since: "22",
    throwexception: true
]
public func countOne(x: UInt32): Int8

/**
* @throws IndexOutOfBoundsException
*/
@Deprecated[message: "Use global funtion `public func countOnes(x: UInt64): Int64` instead."]
@!APILevel[
    since: "22",
    throwexception: true
]
public func countOne(x: UInt64): Int8

/**
* @throws IndexOutOfBoundsException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func reverse(x: UInt64): UInt64

/**
* @throws IndexOutOfBoundsException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func reverse(x: UInt32): UInt32

/**
* @throws IndexOutOfBoundsException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func reverse(x: UInt16): UInt16

/**
* @throws IndexOutOfBoundsException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func reverse(x: UInt8): UInt8

/**
* @throws OverflowException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func checkedAbs(x: Int8): Option<Int8>

/**
* @throws OverflowException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func checkedAbs(x: Int16): Option<Int16>

/**
* @throws OverflowException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func checkedAbs(x: Int32): Option<Int32>

/**
* @throws OverflowException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func checkedAbs(x: Int64): Option<Int64>

@OverflowWrapping
@!APILevel[
    since: "22"
]
public func rotate(num: UInt8, d: Int8): UInt8

@OverflowWrapping
@!APILevel[
    since: "22"
]
public func rotate(num: UInt16, d: Int8): UInt16

@OverflowWrapping
@!APILevel[
    since: "22"
]
public func rotate(num: UInt32, d: Int8): UInt32

@OverflowWrapping
@!APILevel[
    since: "22"
]
public func rotate(num: UInt64, d: Int8): UInt64

@OverflowWrapping
@!APILevel[
    since: "22"
]
public func rotate(num: Int8, d: Int8): Int8

@OverflowWrapping
@!APILevel[
    since: "22"
]
public func rotate(num: Int16, d: Int8): Int16

@OverflowWrapping
@!APILevel[
    since: "22"
]
public func rotate(num: Int32, d: Int8): Int32

@OverflowWrapping
@!APILevel[
    since: "22"
]
public func rotate(num: Int64, d: Int8): Int64

/**
* @throws OverflowException
* @throws IllegalArgumentException
*/
@OverflowWrapping
@!APILevel[
    since: "22",
    throwexception: true
]
public func gcd(x: Int8, y: Int8): Int8

/**
* @throws OverflowException
* @throws IllegalArgumentException
*/
@OverflowWrapping
@!APILevel[
    since: "22",
    throwexception: true
]
public func gcd(x: Int16, y: Int16): Int16

/**
* @throws OverflowException
* @throws IllegalArgumentException
*/
@OverflowWrapping
@!APILevel[
    since: "22",
    throwexception: true
]
public func gcd(x: Int32, y: Int32): Int32

/**
* @throws OverflowException
* @throws IllegalArgumentException
*/
@OverflowWrapping
@!APILevel[
    since: "22",
    throwexception: true
]
public func gcd(x: Int64, y: Int64): Int64

@!APILevel[
    since: "22"
]
public func gcd(x: UInt8, y: UInt8): UInt8

@!APILevel[
    since: "22"
]
public func gcd(x: UInt16, y: UInt16): UInt16

@!APILevel[
    since: "22"
]
public func gcd(x: UInt32, y: UInt32): UInt32

@!APILevel[
    since: "22"
]
public func gcd(x: UInt64, y: UInt64): UInt64

/**
* @throws OverflowException
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func lcm(x: Int8, y: Int8): Int8

/**
* @throws OverflowException
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func lcm(x: Int16, y: Int16): Int16

/**
* @throws OverflowException
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func lcm(x: Int32, y: Int32): Int32

/**
* @throws OverflowException
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func lcm(x: Int64, y: Int64): Int64

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func lcm(x: UInt8, y: UInt8): UInt8

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func lcm(x: UInt16, y: UInt16): UInt16

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func lcm(x: UInt32, y: UInt32): UInt32

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func lcm(x: UInt64, y: UInt64): UInt64

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func clamp(v: Float16, min: Float16, max: Float16): Float16

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func clamp(v: Float32, min: Float32, max: Float32): Float32

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func clamp(v: Float64, min: Float64, max: Float64): Float64

@!APILevel[
    since: "22"
]
public func round(x: Float64): Float64

@!APILevel[
    since: "22"
]
public func round(x: Float32): Float32

@!APILevel[
    since: "22"
]
public func round(x: Float16): Float16

@!APILevel[
    since: "22"
]
public func atan2(y: Float64, x: Float64): Float64

@!APILevel[
    since: "22"
]
public func atan2(y: Float32, x: Float32): Float32

@!APILevel[
    since: "22"
]
public func atan2(y: Float16, x: Float16): Float16

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func fmod(x: Float64, y: Float64): Float64

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func fmod(x: Float32, y: Float32): Float32

/**
* @throws IllegalArgumentException
*/
@!APILevel[
    since: "22",
    throwexception: true
]
public func fmod(x: Float16, y: Float16): Float16

@Frozen
@!APILevel[
    since: "22"
]
public func abs(x: Float64): Float64

@Frozen
@!APILevel[
    since: "22"
]
public func abs(x: Float32): Float32

@Frozen
@!APILevel[
    since: "22"
]
public func abs(x: Float16): Float16

/**
* @throws OverflowException
*/
@Frozen
@!APILevel[
    since: "22",
    throwexception: true
]
public func abs(x: Int64): Int64

/**
* @throws OverflowException
*/
@Frozen
@!APILevel[
    since: "22",
    throwexception: true
]
public func abs(x: Int32): Int32

/**
* @throws OverflowException
*/
@Frozen
@!APILevel[
    since: "22",
    throwexception: true
]
public func abs(x: Int16): Int16

/**
* @throws OverflowException
*/
@Frozen
@!APILevel[
    since: "22",
    throwexception: true
]
public func abs(x: Int8): Int8

/**
* @throws IllegalArgumentException
*/
@Frozen
@!APILevel[
    since: "22",
    throwexception: true
]
public func sqrt(x: Float16): Float16

/**
* @throws IllegalArgumentException
*/
@Frozen
@!APILevel[
    since: "22",
    throwexception: true
]
public func sqrt(x: Float32): Float32

/**
* @throws IllegalArgumentException
*/
@Frozen
@!APILevel[
    since: "22",
    throwexception: true
]
public func sqrt(x: Float64): Float64

@Frozen
@!APILevel[
    since: "22"
]
public func exp(x: Float64): Float64

@Frozen
@!APILevel[
    since: "22"
]
public func exp(x: Float32): Float32

@Frozen
@!APILevel[
    since: "22"
]
public func exp(x: Float16): Float16

@Frozen
@!APILevel[
    since: "22"
]
public func exp2(x: Float64): Float64

@Frozen
@!APILevel[
    since: "22"
]
public func exp2(x: Float32): Float32

@Frozen
@!APILevel[
    since: "22"
]
public func exp2(x: Float16): Float16

@Frozen
@!APILevel[
    since: "22"
]
public func log10(x: Float64): Float64

@Frozen
@!APILevel[
    since: "22"
]
public func log10(x: Float32): Float32

@Frozen
@!APILevel[
    since: "22"
]
public func log10(x: Float16): Float16

@Frozen
@!APILevel[
    since: "22"
]
public func log2(x: Float64): Float64

@Frozen
@!APILevel[
    since: "22"
]
public func log2(x: Float32): Float32

@Frozen
@!APILevel[
    since: "22"
]
public func log2(x: Float16): Float16

@Frozen
@!APILevel[
    since: "22"
]
public func log(x: Float64): Float64

@Frozen
@!APILevel[
    since: "22"
]
public func log(x: Float32): Float32

@Frozen
@!APILevel[
    since: "22"
]
public func log(x: Float16): Float16

@Frozen
@!APILevel[
    since: "22"
]
public func floor(x: Float64): Float64

@Frozen
@!APILevel[
    since: "22"
]
public func floor(x: Float32): Float32

@Frozen
@!APILevel[
    since: "22"
]
public func floor(x: Float16): Float16

@Frozen
@!APILevel[
    since: "22"
]
public func ceil(x: Float64): Float64

@Frozen
@!APILevel[
    since: "22"
]
public func ceil(x: Float32): Float32

@Frozen
@!APILevel[
    since: "22"
]
public func ceil(x: Float16): Float16

@Frozen
@!APILevel[
    since: "22"
]
public func trunc(x: Float64): Float64

@Frozen
@!APILevel[
    since: "22"
]
public func trunc(x: Float32): Float32

@Frozen
@!APILevel[
    since: "22"
]
public func trunc(x: Float16): Float16

@Frozen
@!APILevel[
    since: "22"
]
public func sin(x: Float64): Float64

@Frozen
@!APILevel[
    since: "22"
]
public func sin(x: Float32): Float32

@Frozen
@!APILevel[
    since: "22"
]
public func sin(x: Float16): Float16

@Frozen
@!APILevel[
    since: "22"
]
public func cos(x: Float64): Float64

@Frozen
@!APILevel[
    since: "22"
]
public func cos(x: Float32): Float32

@Frozen
@!APILevel[
    since: "22"
]
public func cos(x: Float16): Float16

@Frozen
@!APILevel[
    since: "22"
]
public func pow(base: Float64, exponent: Float64): Float64

@Frozen
@!APILevel[
    since: "22"
]
public func pow(base: Float32, exponent: Float32): Float32

@Frozen
@!APILevel[
    since: "22"
]
public func pow(base: Float64, exponent: Int64): Float64

@Frozen
@!APILevel[
    since: "22"
]
public func pow(base: Float32, exponent: Int32): Float32

@Deprecated[message: "Use `public interface FloatingPoint<T>` instead."]
@!APILevel[
    since: "22"
]
public interface MathExtension<T> {
    @!APILevel[
        since: "22"
    ]
    static func GetPI(): T
    
    @!APILevel[
        since: "22"
    ]
    static func GetE(): T
}

@!APILevel[
    since: "22"
]
public interface MaxMinValue<T> {
    @!APILevel[
        since: "22"
    ]
    static func getMax(): T
    
    @!APILevel[
        since: "22"
    ]
    static func getMin(): T
}

@!APILevel[
    since: "22"
]
public interface Number<T> {
    @!APILevel[
        since: "22"
    ]
    operator func +(rhs: T): T
    
    @!APILevel[
        since: "22"
    ]
    operator func -(rhs: T): T
    
    @!APILevel[
        since: "22"
    ]
    operator func *(rhs: T): T
    
    @!APILevel[
        since: "22"
    ]
    operator func /(rhs: T): T
    
    @!APILevel[
        since: "22"
    ]
    operator func -(): T
}

@!APILevel[
    since: "22"
]
public interface Integer<T> <: Number<T> {
    @!APILevel[
        since: "22"
    ]
    static func isSigned(): Bool
    
    @!APILevel[
        since: "22"
    ]
    operator func %(rhs: T): T
    
    @!APILevel[
        since: "22"
    ]
    operator func &(rhs: T): T
    
    @!APILevel[
        since: "22"
    ]
    operator func |(rhs: T): T
    
    @!APILevel[
        since: "22"
    ]
    operator func ^(rhs: T): T
    
    @!APILevel[
        since: "22"
    ]
    operator func !(): T
    
    @!APILevel[
        since: "22"
    ]
    operator func >>(n: Int64): T
    
    @!APILevel[
        since: "22"
    ]
    operator func <<(n: Int64): T
}

@!APILevel[
    since: "22"
]
public interface FloatingPoint<T> <: Number<T> {
    @!APILevel[
        since: "22"
    ]
    static func getPI(): T
    
    @!APILevel[
        since: "22"
    ]
    static func getE(): T
    
    @!APILevel[
        since: "22"
    ]
    static func getNaN(): T
    
    @!APILevel[
        since: "22"
    ]
    static func getInf(): T
    
    @!APILevel[
        since: "22"
    ]
    static func getMinDenormal(): T
    
    @!APILevel[
        since: "22"
    ]
    static func getMinNormal(): T
    
    @!APILevel[
        since: "22"
    ]
    func isInf(): Bool
    
    @!APILevel[
        since: "22"
    ]
    func isNaN(): Bool
    
    @!APILevel[
        since: "22"
    ]
    func isNormal(): Bool
}

